using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Configuration.Provider;
using System.Text;

using Comics.Model;

namespace Comics.Providers
{
	public abstract class DataProvider : ProviderBase
	{
		// Settings
        public abstract StringDictionary LoadSettings();
        public abstract void SaveSettings(StringDictionary settings);

		// Access to Comic books
		public abstract ComicBook GetComicBook(Guid comicBookId);
		public abstract void UpdateComicBook(ComicBook comicBook);
		public abstract void DeleteComicBook(ComicBook comicBook);
		public abstract List<ComicBook> GetComicBooks(string filter);

		// Access to Series
		public abstract Series GetSeries(Guid seriesId);
		public abstract void UpdateSeries(Series series);
		public abstract void DeleteSeries(Series series);
		public abstract List<Series> GetSeries(string filter);

		// Access to Characters
		public abstract Character GetCharacter(Guid characterId);
		public abstract void UpdateCharacter(Character character);
		public abstract void DeleteCharacter(Character character);
		public abstract List<Character> GetCharacters(string filter);

		// Access to Creators
		public abstract Creator GetCreator(Guid creatorId);
		public abstract void UpdateCreator(Creator creator);
		public abstract void DeleteCreator(Creator creator);
		public abstract List<Creator> GetCreators(string filter);

        // Member
        public abstract Member GetMember(Guid memberId);
        public abstract Member GetMember(string email, string password);
        public abstract void UpdateMember(Member member);
        public abstract void DeleteMember(Member member);

        // Cart
        public abstract Cart GetCart(Guid cartId);
        public abstract void UpdateCart(Cart cart);
        public abstract void DeleteCart(Cart cart);
        public abstract List<Cart> GetCartsByMember(Guid memberId);

        // Cart Item
        public abstract CartItem GetCartItem(Guid cartItemId);
        public abstract void UpdateCartItem(CartItem cartItem);
        public abstract void DeleteCartItem(CartItem cartItem);
        public abstract List<CartItem> GetCartItemsByCartId(Guid cartId);

	}
}
